Script para almacenar todas las configuraciones del sistema y asi poder restaurarlas.
Cuando queramos comparar este archivo con uno nuevo podemos usar los siguiente comandos:
rpm -qaV > newRpmList.txt
diff rpmNotVerifiedFiles.txt newRpmList.txt --color
#!/bin/bash
BACKUP_FOLDER="BackupConfig ($(hostname)) $(date +"%F %X")"
mkdir "$BACKUP_FOLDER"
ROOT_FOLDER="$BACKUP_FOLDER/RootFolder"
USER="Usuario"
USER_FOLDER="$ROOT_FOLDER/home/$USER"
USER_CONFIG_FOLDER="$USER_FOLDER/config"
#START Function definition
log_OK_message(){
echo -e "\e[32m$1\e[0m" | tee -a "$BACKUP_FOLDER/BU-log.txt"
}
log_ERROR_message(){
echo -e "\e[31m$1\e[0m" | tee -a "$BACKUP_FOLDER/BU-log.txt"
}
log_WARN_message(){
echo -e "\e[35m$1\e[0m" | tee -a "$BACKUP_FOLDER/BU-log.txt"
}
rpm_backup(){
RPM_FOLDER="$BACKUP_FOLDER/RPM List"
mkdir "$RPM_FOLDER"
log_OK_message "Creando lista de paquetes RPM..."
rpm -qa > "$RPM_FOLDER/rpmList.txt"
log_WARN_message "Creando lista de paquets RPM no verificados, puede tardar un rato..."
rpm -qaV > RpmNotVerified.tmp
RPM_NOT_VERIFIED_FILES=$(cat RpmNotVerified.tmp | awk -F " " '{print $NF}' | grep /)
cat RpmNotVerified.tmp > "$RPM_FOLDER/rpmNotVerifiedFiles.txt"
for FILE in $RPM_NOT_VERIFIED_FILES
do
if [[ -f $FILE ]]
then
FILE_PATH="$RPM_FOLDER/$(dirname $FILE)"
mkdir -p "$FILE_PATH"
sudo cp "$FILE" "$FILE_PATH"
elif [[ -d $FILE ]]
then
log_WARN_message "La ruta $FILE es un directorio, no se copia"
else
log_WARN_message "La ruta $FILE no existe, no se copia"
fi
done
rm RpmNotVerified.tmp
}
deb_backup(){
log_OK_message "Creando lista de paquetes DEB..."
dpkg-query --list > "$BACKUP_FOLDER/debList.txt"
}
paths_backup(){
paths_folder="$BACKUP_FOLDER/paths"
mkdir "$paths_folder"
for SINGLE_PATH in $(echo $PATH | tr : "\n"); do ls $SINGLE_PATH > "$paths_folder/$(echo $SINGLE_PATH | tr / _).txt"; done
}
environment_backup(){
env > "$BACKUP_FOLDER/environment.txt"
}
zypper_repos_backup(){
if [ -d "/etc/zypp/repos.d/" ]
then
ZYPPER_REPOS_FOLDER="$ETC_FOLDER/zypp"
mkdir -p "$ZYPPER_REPOS_FOLDER"
cp -r /etc/zypp/repos.d/ "$ZYPPER_REPOS_FOLDER"
log_OK_message "Creado backup del listado de repositorios de zypper";
else
log_ERROR_message "No se ha creado el backup del listado de repositorios de zypper";
fi
}
apt_repos_backup(){
if [ -d "/etc/apt/" ]
then
APT_REPOS_FOLDER="$ETC_FOLDER/apt"
mkdir -p "$APT_REPOS_FOLDER"
cp /etc/apt/sources.list "$APT_REPOS_FOLDER"
cp -r /etc/apt/sources.list.d/ "$APT_REPOS_FOLDER"
log_OK_message "Creado backup del listado de repositorios de apt";
else
log_ERROR_message "No se ha creado el backup del listado de repositorios de apt";
fi
}
kdeglobals_backup(){
if [ -f "$HOME/.config/kdeglobals" ]
then
mkdir -p "$USER_CONFIG_FOLDER"
cp "$HOME/.config/kdeglobals" "$USER_CONFIG_FOLDER/"
log_OK_message "Creado backup del archivo kdeglobals";
else
log_ERROR_message "No se ha creado el backup del archivo kdeglobals";
fi
}
kdedefaults_backup(){
if [ -d "$HOME/.config/kdedefaults" ]
then
mkdir -p "$USER_CONFIG_FOLDER"
cp -r "$HOME/.config/kdedefaults" "$USER_CONFIG_FOLDER/"
log_OK_message "Creado backup del archivo kdedefaults";
else
log_ERROR_message "No se ha creado el backup del archivo kdedefaults";
fi
}
#END Function definition
log_ERROR_message "NOTA: En algun momento se podria pedir la contraseña de root para poder realizar el copiado de paquetes";
#Environment backup
environment_backup;
log_OK_message "Creado backup de variables de entorno";
#Backup rpm file list
if [ -x "$(which rpm 2> /dev/null)" ]
then
rpm_backup;
log_OK_message "Creado listado RPM";
else
log_ERROR_message "NO se ha creado el listado RPM";
fi
#Backup deb file list
if [ -x "$(which dpkg-query 2> /dev/null)" ]
then
deb_backup;
log_OK_message "Creado listado DEB";
else
log_ERROR_message "NO se ha creado el listado DEB";
fi
#Backup paths content
paths_backup;
log_OK_message "Creado listado de Paths";
#Backup for dmesg
sudo dmesg > "$BACKUP_FOLDER/dmesg.txt"
log_OK_message "Creado backup dmesg";
#Backup profile files
mkdir -p "$USER_FOLDER"
cp ~/.profile "$USER_FOLDER/profile"
ETC_FOLDER="$ROOT_FOLDER/etc"
mkdir -p "$ETC_FOLDER"
cp /etc/profile "$ETC_FOLDER/profile"
log_OK_message "Creado backup archivos profile";
#Backup bashrc file
cp ~/.bashrc "$USER_FOLDER/bashrc"
log_OK_message "Creado backup archivo bashrc";
#Backup X11
cp -r /etc/X11 "$ETC_FOLDER"
log_OK_message "Creado backup X11";
#Backup Xorg log
if [ -f "/var/log/Xorg.0.log" ]
then
VAR_LOG_FOLDER="$ROOT_FOLDER/var/log"
mkdir -p "$VAR_LOG_FOLDER"
cp /var/log/Xorg.0.log "$VAR_LOG_FOLDER/"
log_OK_message "Creado backup Xorg log";
else
log_ERROR_message "NO se ha creado backup de Xorg.log";
fi
#Backup .config files
kdeglobals_backup;
kdedefaults_backup;
#Backup zypper repos
zypper_repos_backup;
#Backup apt repos
apt_repos_backup;
#Backup listado /etc/alternatives
ls -la /etc/alternatives --color=always > "$BACKUP_FOLDER/alternatives.txt"
log_OK_message "Creado backup /etc/alternatives";
#Backup xsessions
USR_SHARE_FOLDER="$ROOT_FOLDER/usr/share/"
mkdir -p "$USR_SHARE_FOLDER"
cp -r /usr/share/xsessions "$USR_SHARE_FOLDER"
chmod +w "$USR_SHARE_FOLDER/xsessions"
log_OK_message "Creado backup xsessions";
#Crear README
echo "Backup creado el $(date +"%F %X") del equipo ($(hostname))" > "$BACKUP_FOLDER/README.txt"
echo "" >> "$BACKUP_FOLDER/README.txt"
echo "" >> "$BACKUP_FOLDER/README.txt"
echo "Esta carpeta contiene un backup de los siguientes elementos:" >> "$BACKUP_FOLDER/README.txt"
echo "" >> "$BACKUP_FOLDER/README.txt"
echo " -BU-log que muestra el log de salida de cuando se creó este backup (si se muestra con 'cat' se mostrarán en verde lo que ha ido bien y en rojo lo que ha ido mal) (Carpeta raiz)" >> "$BACKUP_FOLDER/README.txt"
echo " -Contenido de la carpeta /etc/alternatives en el archivo alternatives.txt, el archivo mantiene el esquema de colores del shell, se pueden visualizar usando cat (Carpeta raiz)" >> "$BACKUP_FOLDER/README.txt"
echo "" >> "$BACKUP_FOLDER/README.txt"
echo " -Listado de paquetes RPM instalados (Carpeta RPM List)">> "$BACKUP_FOLDER/README.txt"
echo " -Listado de paquetes RPM con fallos de verificación y una copia de dichos archivos con cambios (Carpeta RPM List)">> "$BACKUP_FOLDER/README.txt"
echo " -Listado de paquetes DEB instalados (Archivo devList.txt)">> "$BACKUP_FOLDER/README.txt"
echo " -Log dmesg (Carpeta raiz)" >> "$BACKUP_FOLDER/README.txt"
echo " -Archivo environment.txt con el contenido de las variables de entorno (Carpeta raiz)" >> "$BACKUP_FOLDER/README.txt"
echo " -La carpeta 'paths' contiene archivos con el contenido que tienen todas las rutas declaradas en la variable de entorno PATH " >> "$BACKUP_FOLDER/README.txt"
echo "" >> "$BACKUP_FOLDER/README.txt"
echo "" >> "$BACKUP_FOLDER/README.txt"
echo "En la carpeta 'RootFolder' se encuentran todos los archivos copiados manteniendo su ruta original en el sistema de archivos (teniendo como referencia de la raiz dicha carpeta RootFolder), los archivos que se guardan en esta carpeta son:" >> "$BACKUP_FOLDER/README.txt"
echo "" >> "$BACKUP_FOLDER/README.txt"
echo " -Carpeta /etc/X11" >> "$BACKUP_FOLDER/README.txt"
echo " -Carpeta /etc/zypp/repos.d" >> "$BACKUP_FOLDER/README.txt"
echo " -Archivo /etc/profile" >> "$BACKUP_FOLDER/README.txt"
echo " -Archivo /var/log/Xorg.0.log" >> "$BACKUP_FOLDER/README.txt"
echo " -Carpeta /usr/share/xsessions/" >> "$BACKUP_FOLDER/README.txt"
echo "" >> "$BACKUP_FOLDER/README.txt"
echo "" >> "$BACKUP_FOLDER/README.txt"
echo "La carpeta del usuario se identifica con /home/usuario (independientemente del nombre del usuario real), los archivos que contiene son (Hay archivos que son ocultos, pero en esta copia se ponen sin el punto inicial para que aparezcan visible):" >> "$BACKUP_FOLDER/README.txt"
echo "" >> "$BACKUP_FOLDER/README.txt"
echo " -Archivo bashrc del usuario" >> "$BACKUP_FOLDER/README.txt"
echo " -Archivo profile del usuario" >> "$BACKUP_FOLDER/README.txt"
echo " -Archivo .config/kdeglobals del usuario" >> "$BACKUP_FOLDER/README.txt"
echo " -Archivo .config/kdedefaults del usuario" >> "$BACKUP_FOLDER/README.txt"
Script | Bash | config | rpm